←
▼
▲
(src)
Sub LoadEnvVars( Path_ofSetCommandLog, Option_ )
ファイルを参照して、複数の環境変数を現在のプロセスに設定します。
【引数】
Path_ofSetCommandLog
環境変数の設定の一覧のファイルパス、または辞書
環境変数全体を、ファイルに記述された値に設定します。
LoadEnvVars "settings.txt", Empty
setting.txt
VAR1=value1
VAR2=3
VAR3=cmd
→ T_Var.vbs # T_LoadEnvVars
テスト
今まで設定されていた環境変数のうち、Path_ofSetCommandLog のファイルに記述されて
いない環境変数は、削除されます。 ただし、Option_ = F_Append にすると削除されません。
Option_
Empty または F_Append または辞書
setting.txt は、コマンドプロンプトの set (Enter) で出力される内容と同じフォーマットです。
VBScript では、下記のように記述します。
g_sh.Run "cmd /C (set > ""C:\folder\settings.txt"")",, True
参考
環境変数全体を、辞書に入っている内容に設定します。
Set dic = CreateObject( "Scripting.Dictionary" )
dic.Item( "VAR1" ) = "value1"
dic.Item( "VAR2" ) = "3"
LoadEnvVars( dic, Empty )
関連
Set envs = CreateObject( "Scripting.Dictionary" )
LoadEnvVars "settings.txt", envs
ファイルに入っている環境変数の設定を、辞書に格納する
サンプル
Option_ 引数に辞書オブジェクトを渡すと、その辞書オブジェクトの内容が変わるだけで、
環境変数の値は変わりません。
サンプル
サンプル
←
▼
▲
(src)
Sub SaveEnvVars( Path_ofSetCommandLog, Option_ )
現在の環境変数をファイルに保存するか、辞書に格納します。
【引数】
Path_ofSetCommandLog
ファイルパス、または辞書、または Empty
Option_
Empty 固定
Path_ofSetCommandLog に、値が入っていない(Empty の)変数を指定したら、
内部で Dictionary オブジェクトを生成して、その中に環境変数の設定値を
格納します。
サンプル:
Dim envs
SaveEnvVars envs, Empty '//[out] envs
echo envs
LoadEnvVars envs, Empty
→ T_Var.vbs # T_LoadEnvVars
テスト
関連
←
▼
▲
Sub ClearEnvVars()
現在のプロセスの環境変数をほぼすべて削除します。
(src)
→ T_Var.vbs # T_LoadEnvVars
テスト
VBScript から削除できない環境変数は残ります。
←
▼
▲
関連
Function OpenForEnvVarsFile( EnvVarsFilePath as string ) as EditEnvVarsFile
(src)
環境変数ファイルを編集します。
Dim f : Set f = OpenForEnvVarsFile( "settings.txt" )
echo f.get_( "VAR_A" )
f.set_ "VAR_A", "1"
f.select_ "VAR_A", "1", Array( "VAR_A", "VAR_B", "VAR_C" ), "0"
f = Empty '// Write
【引数】
EnvVarsFilePath
返り値
環境変数ファイルのパス
サンプル:
ランダムアクセスに対応しています。 OpenForRead や OpenForWrite のように
シーケンシャル(ファイルの先頭から順番)にアクセスする必要はありませんし、
変更しないキーまで Write する必要はありません。
存在しない環境変数を新規に set_ したときは、ABC 順でファイルに記述されます。
Empty の値を set_ すると、その環境変数はファイルから削除されます。
settings.txt
VAR_A
1
1
VAR_A
→ T_VarFile.vbs # [T_VarFile1]
テスト
VAR_A
←
▼
▲
.Path
Property .Path as string
.get_
Function .get_( Name as string ) as string
Name が定義されていないときは、Empty を返します
Sub .set_( Name as string, Value as string or Empty )
.set_
Sub select_( Name as string, Value as string,
OtherNames as array of string, OtherValue as string )
.select_
関連
←
▼
▲
Sub SetVarInBatchFile( Path as string, Symbol as string, Value as variant )
バッチ・ファイルの中で、環境変数を設定している部分の値を変更します。
【引数】
Path
Symbol
バッチ・ファイルのパス
環境変数の名前
Value
環境変数の値
テスト
→ T_VarFile.vbs
T_SetVarInBatchFile
ソース
→ vbslib.vbs
←
▼
▲
エディター等の設定を変更する
Sub Start_VBS_Lib_Settings()
を起動します。
→ vbslib.vbs
ソース
→ SettingTemplate.xml
←
▼
▲
新規にエラーを発生させます。
未知のエラーを発生させます。
Finally ブロックに似た記述をする
関連
テスト
→ T_Err2 フォルダ
警告を表示してプロセスを終了します。
←
▼
▲
Dim e ' as Err2
If TryStart(e) Then On Error Resume Next
...
If TryEnd Then On Error GoTo 0
If e.num = E_FileNotExist Then ... : e.Clear
If e.num <> 0 Then e.Raise
関連
Dim e ' as Err2
If TryStart(e) Then On Error Resume Next
If Trying Then ...
If Trying Then ...
If TryEnd Then On Error GoTo 0
If e.num = E_FileNotExist Then ... : e.Clear
If e.num <> 0 Then e.Raise
Try ブロックの中が、1行だけのとき
Try ブロックの中が、複数行のとき
Trying は、毎行記述する必要があります。
エラーが発生しても、TryStart〜TryEnd の間で続きを実行する場合は、
Trying は不要です。
TryStart を使うと、エラーが発生した場所で、ブレークさせることができます。
E_FileNotExist
E_FileNotExist
ブレークさせるときは、Err2::BreakErrID を設定してください。
On Error Resume Next を呼び出したらブレークしなくなるので、TryStart が、
On Error Resume Next を呼び出すべきかどうかを判定します。
サンプル
→ _err2_test.lzh
Try ブロックの中で発生したエラーでブレークさせるとき
If g_count_up(1)=0 Then Stop '// watch-> g_count [TODO]
echo "g_count(1)=" & g_count(1)
If g_count(1) < 99 Then
If TryStart(e) Then On Error Resume Next
End If
参考
関連
エラーをキューにためる
クリアしたエラーが発生した場所を調べるときは、クリアする代わりに
Err2::Raise してください。
←
▼
▲
Public Number ' Err.Number
Public num ' Err.Number
Public Description ' Err.Description (Error Message)
Public desc ' Err.Description (Error Message)
Public Source ' Err.Source
Public ErrID ' count of (num <> 0) in each first Copy after Clear
Public RaiseID ' count of (num <> 0) in Copy
Public BreakErrID ' as integer
Public BreakRaiseID ' as integer
(src)
Dim g_Err2 as Err2
メンバ関数
err オブジェクトの内容をコピーします。
同じ内容のエラーを再度発生させる。
エラーの内容を変えて、再度エラーを発生させる。
エラーをクリアする。
TryStart を呼び出すと、Err2 オブジェクトを取得できます。
また、g_Err2 グローバル変数からアクセスすることもできます。
メンバ変数
関連
テスト
→ T_Err2 フォルダ
他にもあります。
←
▼
▲
Property Get Err2::Number() as integer
エラーコード。
Property Get Err2::num() as integer
エラー状態でなければ、0 になります。
←
▼
▲
Property Get Err2::Description() as string
エラー・メッセージ。
Property Get Err2::desc() as string
エラーメッセージを表示して、エラー状態から復帰し、 続きを実行する
サンプル
Dim e ' as Err2
If TryStart(e) Then On Error Resume Next
...
If TryEnd Then On Error GoTo 0
If e.num <> 0 Then
echo_v "Error 0x"+ Hex( e.num ) +": "+ e.Description
e.Clear
End If
復帰する前にエラーが発生した場所でブレークするには、Clear の前に Raise
を追加してください。
echo_v "Error 0x"+ Hex( e.num ) +": "+ e.Description
e.Raise
e.Clear
←
▼
▲
Property Get Err2::ErrStr() as string
XML形式のエラーメッセージ。
エラーメッセージの例:
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
関連
←
▼
▲
Function Err2::GetErrStr() as string
標準形式のエラーメッセージを返す。
(src)
エラーメッセージの例:
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
関連
廃止されました
←
▼
▲
Property Get Err2::DebugHint() as string
エラーの内容とデバッグのヒント。
サンプル:
If TryStart(e) Then On Error Resume Next
...
If TryEnd Then On Error GoTo 0
If e.num <> 0 Then echo e.DebugHint : e.Clear
エラーメッセージの例:
下記のファイルをテキストエディタで開いて次のように変数の値を修正すると、
デバッガに接続して問題がある場所で停止します。
"T_Err2_Clear.vbs"
------------------------------------------------------------------
g_debug = 2
------------------------------------------------------------------
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
テスト
→ T_InputCommand.vbs # T_InputCommand_ForgetClear
←
▼
▲
Function Err2::Value() as string
エラーの内容を文字列型で返します。
(src)
廃止されました
←
▼
▲
Sub Err2::Copy( err as Err )
err オブジェクトの内容をコピーします。
(src)
←
▼
▲
Sub Err2::Raise()
同じ内容のエラーを再度発生させる。
(src)
←
▼
▲
Sub Err2::OverRaise( e_num as integer, e_desc as string )
エラーの内容を変えて、再度エラーを発生させる。
(src)
サンプル
Dim e ' as Err2
If TryStart(e) Then On Error Resume Next
...
If TryEnd Then On Error GoTo 0
If e.num <> 0 Then
If Right( e.Description, 2 ) = "/>" Then
message = Left( e.Description, Len( e.Description ) - 2 ) + _
" msg2=""追加メッセージ。""/>"
e.OverRaise e.Number, message
Else
e.Raise
End If
End If
エラーが発生して、そのエラーメッセージが XML 形式なら、属性
msg2="追加メッセージ。" を追加します。
関連
←
▼
▲
Sub Err2::Clear()
エラーをクリアする。
エラー処理が終わったことを示すため、メンバ変数をリセットします。
num = 0 : Description = "" : RaiseID = 0
(src)
関連
エラーメッセージを取得する
エラーの情報コピーしてクリアする
←
▼
▲
Sub Err2::CopyAndClear( out_e2 as Err2 )
エラーの情報を out_e2 にコピーしてから Err2 のエラーをクリアします。
参考
内部で Err2 オブジェクトが生成されて、out_e2 に格納されます。
テスト
→ T_Err2_Main.vbs # T_Err2_CopyAndClear
(src)
CopyAndClear した後でエラーが発生した場合、テストによるエラーであると判断して、
次のようなメッセージが表示されます。
'//エラーが発生した場所を知るには、CopyAndClear する前に Raise してください。
次のように Raise するコードを追加してください。
'//=== Error Handling Test
echo vbCRLF+"Next is Error Test"
If TryStart(e) Then On Error Resume Next
Test '// ここでエラーが発生する
If TryEnd Then On Error GoTo 0
e.Raise '// これを追加する
e.CopyAndClear e2 '//[out] e2
Assert e2.num <> 0 '// テストによるエラーが発生した場所
e.Raise
また、
を設定していたら、設定を無効にしてください。
←
▼
▲
Sub Err2::EnqueueAndClear()
エラーの情報を Err2 の内部キューに入れてから Err2 のエラーをクリアします。
テスト
→ T_Err2_Main.vbs # T_Err2_EnqueueAndClear
サンプル
Dim e ' as Err2
If TryStart(e) Then On Error Resume Next
Err.Raise 1,, "Error1"
If TryEnd Then On Error GoTo 0
e.EnqueueAndClear
If not IsEmpty(e) Then s = e.DequeueAll() : If s <> "" Then Raise 1, s
EnqueueAndClear
(src)
←
▼
▲
Function Err2::DequeueAll() as string
Err2 の内部キューの内容を返し、内部キューを空にします。
テスト
→ T_Err2_Main.vbs # T_Err2_EnqueueAndClear
エラーがキューに入っていないときは、"" を返します。
参考
(src)
<ERROR msg="Error1"/>
<ERROR msg="Error2"/>
XML 書式のエラーメッセージを取得したいときは、ルート要素(タグ)を追加する
必要があるか検討してください。
サンプル返り値
←
▼
▲
Dim Err2::ErrID as integer
エラーの通し番号。
エラーが発生して初めての TryEnd を通ったとき +1 されます。
Err2::Clear した後で、次のエラーが発生すると +1 されます。
関連
←
▼
▲
Dim Err2::RaiseID as integer
エラーの通し番号。
エラーが発生して TryEnd を通るたびに +1 されます。
Err2::Clear で 0 に戻ります。
←
▼
▲
Dim Err2::BreakErrID as integer
デバッガでブレークするエラーの通し番号。
エラーメッセージの前に g_debug を設定するように表示されます。 このメッセージに従って、
デバッガを起動すると、エラーが発生した場所でブレークします。
下記のファイルをテキストエディタで開いて次のように変数の値を修正すると、
デバッガに接続して問題がある場所で停止します。
"T_Err2_Clear.vbs"
------------------------------------------------------------------
g_debug = 2
------------------------------------------------------------------
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
Visual Studio 2008 以降では、エラーが発生した場所からステップ実行することができます。
'--- start of parameters for vbslib include -------------------
g_debug = 1.5
エラーが発生したら Err2::ErrID が+1されますが、Err2::ErrID = Err2::BreakErrID に
なったら、エラーによってデバッガでブレークします。 次に Err2:ErrID が+1されるのは、
Err2::Clear した後にエラーが発生したときです。 それまでの Err.Raise では、Err2:ErrID
ではなく、Err2:RaiseID が+1されます。
ただし、TryStart 〜 TryEnd の間ではないとき(On Error Next Resume を実行していない
とき)にエラーが発生したときは、Err2::BreakErrID の値にかかわらず、エラーが発生したら
必ずエラーブレークします。
サンプル:
参考
関連
g_Err2.BreakErrID を 1.5 とすると、Err2::ErrID が 1 のときのエラーをキャッチする
TryEnd または Trying でブレークします。
通常、
vbslib.vbs をインクルードしたら、g_Err2::BreakErrID に設定されます。
は、エラーではありませんが、内部で Err.Raise を呼び出しているため、
Err2:ErrID が+1されます。
に設定してください。
g_debug が小さすぎると、後で復帰するために問題の無いエラーでブレークします。
また、ブレークしたときはエラー復帰が行われなくなります。
とりあえずデバッガに接続したいときは、十分に大きい値を設定するか、0 に設定して
エラーメッセージから必要な値を確認してください。